package com.wolfcode.store.service.impl;

import com.wolfcode.goodsstore.domain.GoodsStore;
import com.wolfcode.goodsstore.mapper.GoodsStoreMapper;
import com.wolfcode.store.domain.Store;
import com.wolfcode.store.domain.vo.StoreVo;
import com.wolfcode.store.enums.StoreStateEnum;
import com.wolfcode.store.mapper.StoreMapper;
import com.wolfcode.store.service.IStoreService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;

import java.util.List;

/**
 * 仓库信息Service业务层处理
 * 
 * @author wolfcode
 * @date 2022-12-10
 */
@Service
public class StoreServiceImpl implements IStoreService 
{
    @Autowired
    private StoreMapper storeMapper;

    @Autowired
    private GoodsStoreMapper goodsStoreMapper;
    /**
     * 查询仓库信息
     * 
     * @param id 仓库信息主键
     * @return 仓库信息
     */
    @Override
    public Store selectStoreById(Long id)
    {
        return storeMapper.selectStoreById(id);
    }

    /**
     * 查询仓库信息列表
     * 
     * @param store 仓库信息
     * @return 仓库信息
     */
    @Override
    public List<Store> selectStoreList(Store store)
    {
        return storeMapper.selectStoreList(store);
    }

    /**
     * 新增仓库信息
     * 
     * @param storeVo 仓库信息
     * @return 结果
     */
    @Override
    public int insertStore(StoreVo storeVo)
    {
        Assert.notNull(storeVo,"非法参数");
        Assert.notNull(storeVo.getStoreName(),"仓库名称不能为空");
        Assert.notNull(storeVo.getStoreAddress(),"仓库地址不能为空");
        Store store = new Store();
        BeanUtils.copyProperties(storeVo,store);
        store.setState(StoreStateEnum.NORMAL.ordinal());
        return storeMapper.insertStore(store);
    }

    /**
     * 修改仓库信息
     * 
     * @param storeVo 仓库信息
     * @return 结果
     */
    @Override
    public int updateStore(StoreVo storeVo)
    {
        Assert.notNull(storeVo,"非法参数");
        Assert.notNull(storeVo.getId(),"非法参数");
        Assert.notNull(storeVo.getStoreName(),"仓库名称不能为空");
        Assert.notNull(storeVo.getStoreAddress(),"仓库地址不能为空");
        Store storeSame = storeMapper.selectStoreById(storeVo.getId());
        Assert.notNull(storeSame,"仓库不存在");
        Assert.state(storeSame.getState() == StoreStateEnum.NORMAL.ordinal()
                ,"仓库状态异常");
        Store store = new Store();
        BeanUtils.copyProperties(storeVo,store);
        return storeMapper.updateStore(store);
    }

    /**
     * 批量删除仓库信息
     * 
     * @param ids 需要删除的仓库信息主键
     * @return 结果
     */
    @Override
    public int deleteStoreByIds(Long[] ids)
    {
        return storeMapper.deleteStoreByIds(ids);
    }

    /**
     * 删除仓库信息信息
     * 
     * @param id 仓库信息主键
     * @return 结果
     */
    @Override
    public int deleteStoreById(Long id)
    {
        Assert.notNull(id,"非法参数");
        Store storeSame = storeMapper.selectStoreById(id);
        Assert.notNull(storeSame,"仓库不存在");
        GoodsStore goodsStore = new GoodsStore();
        goodsStore.setStoreId(id);
        List<GoodsStore> goodsStores = goodsStoreMapper.selectGoodsList(goodsStore);
        Assert.noNullElements(goodsStores,"还有物品的仓库不能被删除");
        Store store = new Store();
        store.setId(id);
        store.setState(-StoreStateEnum.DELETE.ordinal());
        return storeMapper.updateStore(store);
    }
}
